export default{
  namespaced:true,
  
  state:()=>({
    // 购物车数据 JSON.parse()转化为数组 获取本地存储的购物车数据
    cart: JSON.parse(uni.getStorageSync('cart') || '[]') ,
  }),
  
  mutations:{
    addToCart(state,goods){
      // 行用find函数进行遍历  里面每一项是否相等
      const findResult = state.cart.find(x=>x.goods_id === goods.goods_id)
      if(!findResult){
        // 为true说明 数组里面没有 就添加到数组中
        state.cart.push(goods)
      }else{
        // 为false说明 数组中已经有这个数据 该数据自增加一就行了
        findResult.goods_count++
      }
      // 存储到本地
      this.commit('m_cart/saveToStorage')
    },
    // 实现购物车数据本地存储
    saveToStorage(state){
      // JSON.stringify()转化为字符串形式
      uni.setStorageSync('cart',JSON.stringify(state.cart))
    },
    // 更新购物车中商品的勾选状态
    updateGoodsState(state,goods){
      // 遍历购物车中的数据
     const findResult = state.cart.find(x=>x.goods_id===goods.goods_id)
     if(findResult){
       // 为true 修改状态
       findResult.goods_state = goods.goods_state
       // 存储到本地
       this.commit('m_cart/saveToStorage')
     }
    },
    // 更新商品的数量
    updateGoodsCount(state,goods){
      const findResult = state.cart.find(x=>x.goods_id===goods.goods_id)
      if(findResult){
        findResult.goods_count=goods.goods_count
        // 存储到本地
        this.commit('m_cart/saveToStorage')
      }
    },
    // 根据id删除购物车商品
    removeGoodsById(state,goods_id){
      // 通过filter函数过滤出要删除的商品
      state.cart = state.cart.filter(x=>x.goods_id !== goods_id)
      // 存储到本地
      this.commit('m_cart/saveToStorage')
    },
    // 通过全选按钮控制选中状态
    updateAllGoodsState(state,newState){
      state.cart.forEach(x=>x.goods_state=newState)
      this.commit('m_cart/saveToStorage')
    }
  },
  
  getters:{
    // 对购物车商品数进行处理 total购物车商品的总数量
    total(state){
    // let c = 0
    // // 用forEach进行遍历 然后进行累加
    // state.cart.forEach( x => c += x.goods_count)
    // return c
    return state.cart.reduce((total,item)=>total+=item.goods_count,0)
    },
    // 计算选择的个数
    checkedCount(state){
      // 使用filter过滤出选中的数据形成新的数组 在使用reduce进行累加
      return state.cart.filter(x=>x.goods_state).reduce((total,item)=>total+=item.goods_count,0)
    },
    // 勾选商品的总价格
    checkedGoodsAmount(state){
      // 先过滤出已选中的商品形成新数组 再通过计算得出总金额进行累加
      return state.cart.filter(x=>x.goods_state).reduce((total,item)=>total+=item.goods_count*item.goods_price,0).toFixed(2)
    }
  }
}